package com.itheima.digui;

import com.itheima.util.ListNode;

/**
 * @author MMXZKA
 * @date 2025-08-01 21:51
 */
//给你两个 非空 的链表，表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的，并且每个节点只能存储 一位 数字。
//
//请你将两个数相加，并以相同形式返回一个表示和的链表。
//
//你可以假设除了数字 0 之外，这两个数都不会以 0 开头。
public class LeedCode2 {

    public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
        return add(l1, l2 , 0);
    }

    private ListNode add(ListNode l1, ListNode l2, Integer carryOn ) {
        ListNode res = new ListNode();

        if (l1 == null && l2 == null) {
            if(carryOn == 1){
                return  new ListNode(1);
            }
            return null;
        }

        int val1 = (l1 != null) ? l1.val : 0;
        int val2 = (l2 != null) ? l2.val : 0;

        int sum = val1 + val2 + carryOn;
        if(sum >= 10){
            sum -= 10;
            res.val = sum;
            carryOn = 1;
        }else {
            res.val = sum;
            carryOn = 0;
        }

        ListNode next1 =(l1 !=null) ? l1.next : null;
        ListNode next2 =(l2 !=null) ? l2.next : null;
        res.next = add(next1, next2, carryOn);

        return res;
    }
}
